#include "mylist.h"
#include <stdio.h>
#include <string.h>

#ifndef MYSTACK_H
#define MYSTACK_H

typedef Element* Stack;

// initialization
Stack initStack(){
	Stack st=initList();
	return st;
}
// pop to stack
void* Pop(Stack st){
	void* item=retriveFromList(st->next);
	deleteFromList(st, st->next);
	return item;
}
// top to stack
void* Top(Stack st){
	return retriveFromList(st->next);
}
// push from stack
void Push(Stack st, void *item){
	insertToList(st, item);
}
// is stack empty
int stackEmpty(Stack st)
{
	return st->next==NULL;
}
// delete stack
void deleteStack(Stack st){
	while(!stackEmpty(st))
		Pop(st);
}
//  copy stack & size of item in byte
Stack copyStack(Stack s, int sizeElement){
	Stack tmp=initStack(), ast=initStack();
	while(!stackEmpty(s))
		Push(tmp, Pop(s));
	while(!stackEmpty(tmp)){
		void *x=Pop(tmp);
		void *y=(void*)malloc(sizeElement);
		memcpy(y, x, sizeElement);
		Push(s, x);
		Push(ast, y);
	}
	return ast;
}
#endif